web安全|渗透测试
基础概念
域名
概念:
每一个计算机都有一个数字地址,— IP地址,但是这个IP地址很复杂,难以记住,所以我们就给他一个容易记的别名—域名.例如:百度的IP地址之一是:180.101.50.242,域名是:www.baidu.com
结构:
一个完整的域名是从右到左读的,
www . baidu . com
[子域名] [二级域] [顶级域]
- 顶级域(TLD):也叫做“域名后缀”,是最后一部分,如
.com。- 通用顶级域(gTLD):如
.com(公司/商业)、.org(组织)、.net(网络)、.edu(教育机构),以及现在成千上万的新顶级域如.app,.shop,.ai等。 - 国家和地区代码顶级域(ccTLD):如
.cn(中国)、.us(美国)、.jp(日本)等。
- 通用顶级域(gTLD):如
- 二级域(SLD):这是域名的核心部分,是您自己注册和选择的独特名称,如
baidu。它代表了您的品牌、公司或个人身份。 - 子域名:这是最左边的部分,是可选的,如
www。
域名是怎么工作的?
当你在浏览器中输入一个域名并按下回车时,背后发生了一个非常快速和复杂的过程,这依赖于 域名系统(DNS)。
你可以把 DNS 想象成互联网的“巨型电话簿”或“导航地图”。
过程简化如下:
- 您在浏览器输入
www.baidu.com。 - 您的计算机会向 DNS服务器 发出一个查询请求:“请问
www.baidu.com的IP地址是多少?” - DNS服务器在它的记录中查找,最终找到对应的IP地址,例如
180.101.50.242。 - DNS服务器将这个IP地址返回给您的浏览器。
- 您的浏览器拿到IP地址后,才真正地向
180.101.50.242这个服务器发起连接,请求网站内容。 - 服务器将网页数据发送回您的浏览器,您就看到百度的首页了。
整个过程通常在毫秒之间完成。
HOSTS文件和DNS
HTTP 和 HTTPS 的网络协议栈对比
HTTP 的协议栈
text
1 | HTTP |
- HTTP(超文本传输协议):负责传输网页内容。
- TCP(传输控制协议):提供可靠的数据传输。
- IP(网际协议):负责网络寻址和路由。
特点:数据是明文传输,不安全,容易被窃听或篡改。
HTTPS 的协议栈
text
1 | HTTP |
- HTTP:仍然是传输网页内容的应用层协议。
- SSL / TLS(安全套接层 / 传输层安全协议):在 HTTP 和 TCP 之间加入了一个安全层。
- TCP 和 IP:基础通信协议不变。
特点:
- 在 HTTP 和 TCP 之间增加了 SSL/TLS 加密层。
- 数据经过加密,防止窃听和篡改。
- 提供身份验证,确保你连接的是正确的服务器。
核心区别总结
| 特性 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,不安全 | 加密传输,安全 |
| 协议栈 | HTTP → TCP → IP | HTTP → SSL/TLS → TCP → IP |
| 默认端口 | 80 | 443 |
| 用途 | 普通网页浏览 | 需要安全性的场景(如登录、支付 |
请求-响应模型
HTTP 协议基于客户端-服务器模型。一次完整的交互包含一对 Request 和 Response。
- 客户端 (Client):通常是 Web 浏览器或 App,主动发起一个 Request。
- 服务器 (Server):接收并处理 Request,然后返回一个 Response。
核心组件对比
| 组件 | Request(请求) | Response(响应) |
|---|---|---|
| 起始行 | 请求行:定义了操作的类型和目标。 | 状态行:报告了请求的处理结果。 |
| 头部 | 请求头:传递客户端信息、请求偏好和条件。 | 响应头:传递服务器信息、响应元数据和指令。 |
| 主体 | 请求体:包含要发送给服务器的数据(可选)。 | 响应体:包含服务器返回的实际数据(可选)。 |
一、Request(请求) - 详细分解
请求包是客户端向服务器发出的“问题”或“指令”。
1. 请求行
请求的第一行,格式为:<方法> <请求目标> <HTTP版本>
| 部分 | 描述 | 常见示例 |
|---|---|---|
| 方法 | 定义要对资源执行的操作。 | GET(获取资源),POST(提交数据),PUT(更新资源),DELETE(删除资源),HEAD(获取元数据) |
| 请求目标 | 指定请求的资源。通常是 URL 的路径部分。 | /index.html, /api/users/123 |
| HTTP 版本 | 客户端使用的协议版本。 | HTTP/1.1, HTTP/2 |
2. 请求头
一系列键值对,为服务器提供请求的附加信息。
| 常见请求头 | 描述 |
|---|---|
Host |
必需。服务器的域名和端口。 |
User-Agent |
客户端软件标识(浏览器/操作系统)。 |
Accept |
客户端能够处理的响应内容类型(如 text/html, application/json)。 |
Content-Type |
请求体的媒体类型(如 application/json)。 |
Content-Length |
请求体的长度(字节)。 |
Authorization |
包含访问资源的凭证(如 Bearer <token>)。 |
Cookie |
将之前服务器设置的 Cookie 回传。 |
3. 请求体
- 用途:用于在
POST、PUT等方法中携带需要发送的数据。 - 内容:表单数据、JSON、XML、文件等。
- 格式:由
Content-Type头指定。
Request 完整示例
http
1 | POST /api/login HTTP/1.1 |
解读:
- 请求行:使用
POST方法向/api/login发送数据。 - 请求头:
Host:目标服务器。Content-Type和Content-Length:描述了请求体是长度为 52 字节的 JSON 数据。Accept:期望服务器返回 JSON 格式的响应。
- 请求体:具体的登录凭证(JSON 格式)。
二、Response(响应) - 详细分解
响应包是服务器对客户端请求的“回答”。
1. 状态行
响应的第一行,格式为:<HTTP版本> <状态码> <原因短语>
| 部分 | 描述 | 常见示例 |
|---|---|---|
| HTTP 版本 | 服务器使用的协议版本。 | HTTP/1.1, HTTP/2 |
| 状态码 | 一个三位数代码,表示请求的结果。 | 200 OK(成功),404 Not Found(未找到),500 Internal Server Error(服务器错误) |
| 原因短语 | 状态码的简短文字描述。 | OK, Not Found |
主要状态码分类:
- 1xx (信息):请求已接收,继续处理。
- 2xx (成功):请求被成功处理。
200 OK是最常见的成功状态。 - 3xx (重定向):需要客户端进一步操作以完成请求。
- 4xx (客户端错误):请求包含语法错误或无法完成。
404 Not Found(资源不存在),403 Forbidden(无权限)。 - 5xx (服务器错误):服务器处理请求时发生错误。
500 Internal Server Error(服务器内部错误)。
2. 响应头
一系列键值对,提供关于响应的元数据。
| 常见响应头 | 描述 |
|---|---|
Content-Type |
响应体的媒体类型(如 text/html; charset=UTF-8)。 |
Content-Length |
响应体的长度(字节)。 |
Server |
服务器软件信息。 |
Set-Cookie |
指示客户端存储一个 Cookie。 |
Cache-Control |
指示如何缓存响应(如 max-age=3600)。 |
Location |
在重定向时使用,指定新的资源地址。 |
3. 响应体
- 用途:包含服务器返回的实际数据。
- 内容:如果请求成功,可能是 HTML 网页、JSON 数据、图片等。如果请求失败,可能是错误描述页面。
Response 完整示例
http
1 | HTTP/1.1 200 OK |
解读:
- 状态行:
HTTP/1.1 200 OK表示请求已成功处理。 - 响应头:
Content-Type和Content-Length:描述了响应体是 JSON 数据。Server:显示了服务器软件是 Nginx。Set-Cookie:要求浏览器设置一个会话 Cookie。
- 响应体:具体的成功响应数据(JSON 格式)。
总结
| 特性 | Request(请求) | Response(响应) |
|---|---|---|
| 发起方 | 客户端 | 服务器 |
| 目的 | 向服务器索取资源或提交数据 | 返回客户端请求的结果或数据 |
| 起始行 | 请求行(方法 + URL + 版本) | 状态行(版本 + 状态码 + 原因) |
| 主体内容 | 要上传的数据(如表单、文件) | 要下载的数据(如网页、API 结果) |